/**
 * @Author 12629
 * @Date 2022/3/9 19:48
 * @Description：
 */

import java.util.ArrayList;
import java.util.List;

/**
 * 写一个泛型类，泛型类中写一个方法，找到泛型数组当中的最大值。
 * 泛型的上界：
 * 语法：
 * T  extends  Number :T 是Number或者Number的子类  泛型的上界
 *
 * T extends Comparable<T>  T 一定是实现了Comparable接口的类
 */
class Alg2<T extends Comparable<T>> {

    public T findMax(T[] array) {
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}
class Test<T extends Number> {

}

class Alg {
    public<T extends Comparable<T>> T findMax(T[] array) {
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}

class Alg3 {
    public static <T extends Comparable<T>> T findMax(T[] array) {
        T max = array[0];
        for (int i = 1; i < array.length; i++) {
            if(max.compareTo(array[i]) < 0) {
                max = array[i];
            }
        }
        return max;
    }
}
public class TestDemo2 {

    public static void main(String[] args) {
        ArrayList<Integer> arrayList1 = new ArrayList<>();
        ArrayList<Double> arrayList2 = new ArrayList<>();

        List<? extends Number> list = arrayList2;

        //list.add(1.0); 不适合写入

        Number a = list.get(0);//适合读取

    }

    public static void main4(String[] args) {
        Integer[] array = {1,2,8,3};
        System.out.println(Alg3.findMax(array));
    }

    public static void main3(String[] args) {
        Alg alg = new Alg();
        Integer[] array = {1,2,8,3};
        System.out.println(alg.<Integer>findMax(array));
    }
    public static void main1(String[] args) {
        Alg2<Integer> alg = new Alg2<>();
        Integer[] array = {1,2,8,3};
        System.out.println(alg.findMax(array));

        Test<Integer> test = null;
        //Test<String> test2 = null;

    }
}
